package com.xiaoma.mvcconfig;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * Session 工具类，用于保存当前的Session到当前的线程中，
 * @author Knight-Ran 2016年4月25日 下午7:19:47
 */
public final class SessionHolder {
    
    
    /**
     * 声明一个ThreadLocal对象，用于保存当前的session到当前的线程当中
     */
    private static ThreadLocal<HttpServletRequest> THREADLOCAL_CURRENT_HTTPSESSION = new ThreadLocal<HttpServletRequest>();
    
    /**
     * 构造方法
     */
    private SessionHolder(){}
    
    /**
     * 获取当前的session
     * @return
     */
    public static HttpSession getCurrentSession(){
        return THREADLOCAL_CURRENT_HTTPSESSION.get().getSession();
    }
    
    /**
     * @param request
     */
    public static void setCurrentHttpServletRequest(HttpServletRequest request){
        THREADLOCAL_CURRENT_HTTPSESSION.set(request);
    }
    
    public static void removeCurrentSession(){
        THREADLOCAL_CURRENT_HTTPSESSION.remove();
    }
    
    /**
     * 更新当前session
     * @return 新的session
     * @author dengzr
     * @date 2016年10月18日 下午4:03:11
     */
    public static HttpSession changeCurrentSession(){
        HttpSession preSession = THREADLOCAL_CURRENT_HTTPSESSION.get().getSession();
        
        // 作废登陆前session
        preSession.invalidate();
        
        // 重新获取一个新session
        HttpSession newSession = THREADLOCAL_CURRENT_HTTPSESSION.get().getSession(true);
        
        return newSession;
    }
    
}
